package map.beans.owf;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.builder.ToStringBuilder;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "universalName", "displayName", "description", "widgetVersion", "widgetUrl", "imageUrlSmall",
		"imageUrlLarge", "width", "height", "visible", "singleton", "background", "widgetTypes", "defaultTags", "intents" })
public class OwfDescriptorBean {

	@JsonProperty("universalName")
	private String universalName;
	@JsonProperty("displayName")
	private String displayName;
	@JsonProperty("description")
	private String description;
	@JsonProperty("widgetVersion")
	private String widgetVersion;
	@JsonProperty("widgetUrl")
	private String widgetUrl;
	@JsonProperty("imageUrlSmall")
	private String imageUrlSmall;
	@JsonProperty("imageUrlLarge")
	private String imageUrlLarge;
	@JsonProperty("width")
	private int width;
	@JsonProperty("height")
	private int height;
	@JsonProperty("visible")
	private boolean visible;
	@JsonProperty("singleton")
	private boolean singleton;
	@JsonProperty("background")
	private boolean background;
	@JsonProperty("widgetTypes")
	private List<String> widgetTypes = new ArrayList<String>();
	@JsonProperty("defaultTags")
	private List<Object> defaultTags = new ArrayList<Object>();
	@JsonProperty("intents")
	private Intents intents;
	private Map<String, Object> additionalProperties = new HashMap<String, Object>();

	@JsonProperty("universalName")
	public String getUniversalName() {
		return universalName;
	}

	@JsonProperty("universalName")
	public void setUniversalName(String universalName) {
		this.universalName = universalName;
	}

	public OwfDescriptorBean withUniversalName(String universalName) {
		this.universalName = universalName;
		return this;
	}

	@JsonProperty("displayName")
	public String getDisplayName() {
		return displayName;
	}

	@JsonProperty("displayName")
	public void setDisplayName(String displayName) {
		this.displayName = displayName;
	}

	public OwfDescriptorBean withDisplayName(String displayName) {
		this.displayName = displayName;
		return this;
	}

	@JsonProperty("description")
	public String getDescription() {
		return description;
	}

	@JsonProperty("description")
	public void setDescription(String description) {
		this.description = description;
	}

	public OwfDescriptorBean withDescription(String description) {
		this.description = description;
		return this;
	}

	@JsonProperty("widgetVersion")
	public String getWidgetVersion() {
		return widgetVersion;
	}

	@JsonProperty("widgetVersion")
	public void setWidgetVersion(String widgetVersion) {
		this.widgetVersion = widgetVersion;
	}

	public OwfDescriptorBean withWidgetVersion(String widgetVersion) {
		this.widgetVersion = widgetVersion;
		return this;
	}

	@JsonProperty("widgetUrl")
	public String getWidgetUrl() {
		return widgetUrl;
	}

	@JsonProperty("widgetUrl")
	public void setWidgetUrl(String widgetUrl) {
		this.widgetUrl = widgetUrl;
	}

	public OwfDescriptorBean withWidgetUrl(String widgetUrl) {
		this.widgetUrl = widgetUrl;
		return this;
	}

	@JsonProperty("imageUrlSmall")
	public String getImageUrlSmall() {
		return imageUrlSmall;
	}

	@JsonProperty("imageUrlSmall")
	public void setImageUrlSmall(String imageUrlSmall) {
		this.imageUrlSmall = imageUrlSmall;
	}

	public OwfDescriptorBean withImageUrlSmall(String imageUrlSmall) {
		this.imageUrlSmall = imageUrlSmall;
		return this;
	}

	@JsonProperty("imageUrlLarge")
	public String getImageUrlLarge() {
		return imageUrlLarge;
	}

	@JsonProperty("imageUrlLarge")
	public void setImageUrlLarge(String imageUrlLarge) {
		this.imageUrlLarge = imageUrlLarge;
	}

	public OwfDescriptorBean withImageUrlLarge(String imageUrlLarge) {
		this.imageUrlLarge = imageUrlLarge;
		return this;
	}

	@JsonProperty("width")
	public int getWidth() {
		return width;
	}

	@JsonProperty("width")
	public void setWidth(int width) {
		this.width = width;
	}

	public OwfDescriptorBean withWidth(int width) {
		this.width = width;
		return this;
	}

	@JsonProperty("height")
	public int getHeight() {
		return height;
	}

	@JsonProperty("height")
	public void setHeight(int height) {
		this.height = height;
	}

	public OwfDescriptorBean withHeight(int height) {
		this.height = height;
		return this;
	}

	@JsonProperty("visible")
	public boolean isVisible() {
		return visible;
	}

	@JsonProperty("visible")
	public void setVisible(boolean visible) {
		this.visible = visible;
	}

	public OwfDescriptorBean withVisible(boolean visible) {
		this.visible = visible;
		return this;
	}

	@JsonProperty("singleton")
	public boolean isSingleton() {
		return singleton;
	}

	@JsonProperty("singleton")
	public void setSingleton(boolean singleton) {
		this.singleton = singleton;
	}

	public OwfDescriptorBean withSingleton(boolean singleton) {
		this.singleton = singleton;
		return this;
	}

	@JsonProperty("background")
	public boolean isBackground() {
		return background;
	}

	@JsonProperty("background")
	public void setBackground(boolean background) {
		this.background = background;
	}

	public OwfDescriptorBean withBackground(boolean background) {
		this.background = background;
		return this;
	}

	@JsonProperty("widgetTypes")
	public List<String> getWidgetTypes() {
		return widgetTypes;
	}

	@JsonProperty("widgetTypes")
	public void setWidgetTypes(List<String> widgetTypes) {
		this.widgetTypes = widgetTypes;
	}

	public OwfDescriptorBean withWidgetTypes(List<String> widgetTypes) {
		this.widgetTypes = widgetTypes;
		return this;
	}

	@JsonProperty("defaultTags")
	public List<Object> getDefaultTags() {
		return defaultTags;
	}

	@JsonProperty("defaultTags")
	public void setDefaultTags(List<Object> defaultTags) {
		this.defaultTags = defaultTags;
	}

	public OwfDescriptorBean withDefaultTags(List<Object> defaultTags) {
		this.defaultTags = defaultTags;
		return this;
	}

	@JsonProperty("intents")
	public Intents getIntents() {
		return intents;
	}

	@JsonProperty("intents")
	public void setIntents(Intents intents) {
		this.intents = intents;
	}

	public OwfDescriptorBean withIntents(Intents intents) {
		this.intents = intents;
		return this;
	}

	@Override
	public String toString() {
		return ToStringBuilder.reflectionToString(this);
	}

	@JsonAnyGetter
	public Map<String, Object> getAdditionalProperties() {
		return this.additionalProperties;
	}

	@JsonAnySetter
	public void setAdditionalProperties(String name, Object value) {
		this.additionalProperties.put(name, value);
	}

}
